/**
 * 获取进程资源情况
 *
 * 输入参数:
 *      无
 *
 * 输出参数:
 *      object: 资源情况
 * 
 *   Created by wbx on 2022/9/9
 */
(() => {
  // 私有区域
  const Worker = Host.type('MetaServer.WorkerService', 'MetaServer');

  return function ({ UID }) {
    // 验证用户
    if (!UID) throw Error("未授权的访问");
    const TotalEngineCount = Worker.TotalEngineCount;
    const FreeEngineCount = Worker.FreeEngineCount;

    const {
      Is64BitOperatingSystem,         // 获取一个值，该值指示当前操作系统是否为 64 位操作系统。
      Is64BitProcess,                 // 获取一个值，该值指示当前进程是否为 64 位进程。
      MachineName,                    // 获取此本地计算机的 NetBIOS 名称。
      OSVersion,                      // 获取当前平台标识符和版本号。
      ProcessorCount,                 // 获取当前进程可用的处理器数。
      SystemPageSize,                 // 获取操作系统的内存页的字节数。
      TickCount64,                    // 获取系统启动后经过的毫秒数。
      Version: CLRVersion,            // 获取由公共语言运行时的主版本号、次要版本号、内部版本号和修订号组成的版本。
      WorkingSet,                     // 获取映射到进程上下文的物理内存量。
    } = A.__clr.System.Environment;

    const Current = A.__clr.System.Diagnostics.Process.GetCurrentProcess();
    Current.Refresh();
    const {
      HandleCount,                    // 获取由进程打开的句柄数。
      MaxWorkingSet,                  // 获取或设置关联进程允许的最大工作集大小（以字节为单位）。
      MinWorkingSet,                  // 获取或设置关联进程允许的最小工作集大小（以字节为单位）。
      NonpagedSystemMemorySize64,     // 获取为关联的进程分配的非分页系统内存量（以字节为单位）。
      PagedMemorySize64,              // 获取为关联的进程分配的分页内存量（以字节为单位）。
      PagedSystemMemorySize64,        // 获取为关联进程分配的可分页系统内存量（以字节为单位）。
      PeakPagedMemorySize64,          // 获取关联的进程使用的虚拟内存分页文件中的最大内存量（以字节为单位）。
      PeakVirtualMemorySize64,        // 获取关联进程使用的最大虚拟内存量（以字节为单位）。
      PeakWorkingSet64,               // 获取关联进程使用的最大物理内存量（以字节为单位）。
      PrivateMemorySize64,            // 获取为关联的进程分配的专用内存量（以字节为单位）。
      PrivilegedProcessorTime,        // 获取此进程的特权处理器时间。
      ProcessName,                    // 获取该进程的名称。
      StartTime,                      // 获取关联进程启动的时间。
      TotalProcessorTime,             // 获取此进程的总的处理器时间。
      UserProcessorTime,              // 获取此进程的用户处理器时间。
      VirtualMemorySize64,            // 获取为关联进程分配的虚拟内存量（以字节为单位）。
      WorkingSet64,                   // 获取为关联的进程分配的物理内存量（以字节为单位）。
      Threads,
    } = Current;

    return {
      Now: A.__clr.System.DateTime.Now,
      TotalEngineCount,
      FreeEngineCount,
      Version: A.version,

      Is64BitOperatingSystem,         // 获取一个值，该值指示当前操作系统是否为 64 位操作系统。
      Is64BitProcess,                 // 获取一个值，该值指示当前进程是否为 64 位进程。
      MachineName,                    // 获取此本地计算机的 NetBIOS 名称。
      OSVersion,                      // 获取当前平台标识符和版本号。
      ProcessorCount,                 // 获取当前进程可用的处理器数。
      SystemPageSize,                 // 获取操作系统的内存页的字节数。
      TickCount64,                    // 获取系统启动后经过的毫秒数。
      CLRVersion,                     // 获取由公共语言运行时的主版本号、次要版本号、内部版本号和修订号组成的版本。
      WorkingSet,                     // 获取映射到进程上下文的物理内存量。

      HandleCount,                    // 获取由进程打开的句柄数。
      MaxWorkingSet,                  // 获取或设置关联进程允许的最大工作集大小（以字节为单位）。
      MinWorkingSet,                  // 获取或设置关联进程允许的最小工作集大小（以字节为单位）。
      NonpagedSystemMemorySize64,     // 获取为关联的进程分配的非分页系统内存量（以字节为单位）。
      PagedMemorySize64,              // 获取为关联的进程分配的分页内存量（以字节为单位）。
      PagedSystemMemorySize64,        // 获取为关联进程分配的可分页系统内存量（以字节为单位）。
      PeakPagedMemorySize64,          // 获取关联的进程使用的虚拟内存分页文件中的最大内存量（以字节为单位）。
      PeakVirtualMemorySize64,        // 获取关联进程使用的最大虚拟内存量（以字节为单位）。
      PeakWorkingSet64,               // 获取关联进程使用的最大物理内存量（以字节为单位）。
      PrivateMemorySize64,            // 获取为关联的进程分配的专用内存量（以字节为单位）。
      PrivilegedProcessorTime,        // 获取此进程的特权处理器时间。
      ProcessName,                    // 获取该进程的名称。
      StartTime,                      // 获取关联进程启动的时间。
      TotalProcessorTime,             // 获取此进程的总的处理器时间。
      UserProcessorTime,              // 获取此进程的用户处理器时间。
      VirtualMemorySize64,            // 获取为关联进程分配的虚拟内存量（以字节为单位）。
      WorkingSet64,                   // 获取为关联的进程分配的物理内存量（以字节为单位）。

      ThreadCount: Threads.Count,
    };
  };
})()